<?php

/**
 * 这是统一入口，程序从这里启动
 */

session_start(); // 开启全局session支持
error_reporting(E_ERROR | E_WARNING | E_PARSE); // 关闭错误


// 定义常量
// define("CONF_PATH",'./');

// 引入常用函数
require_once('./hanshu.php');

// 引入全局‘配置’,$PZ这个变量会在后文中大量通过$GLOBALS['PZ']或助手函数peizhi()引用
$PZ = include('./peizhi.php'); 


//=== 自动加载 ======================================================================
function cute_classpath($path){//向自动加载目录列表中添加目录
    set_include_path(get_include_path().PATH_SEPARATOR.$path); //目录之间用冒号/分号分隔        
}
cute_classpath('kongzhiqi/'); //添加自动加载路径，可以多次执行，添加多个
cute_classpath('lib/');
spl_autoload_register("my_autoload"); //使用spl_autoload_register来注册我们自己的autoload函数
// 重载autoload函数，以实现多目录自动加载
function my_autoload($className){    
    $directories = explode(PATH_SEPARATOR, get_include_path()) ;
    $fileName = $className.".php";    
    foreach($directories as $dir){
        $filePath = $dir.DIRECTORY_SEPARATOR.$fileName;
        if( file_exists($filePath) ) {
            include_once "$className.php";
            break;
        }
    }
}

// 以下代码要放在自动加载后，否则找不到

//=== 日志 ==========================================================================
$LOG = Log::getInstance(array(
    'LOG_FILE'=>$PZ['sys']['log'], 
    'LOG_LEVEL'=>75 //INFO
));
$LOG->logMessage("====正在运行====",Log::NOTICE,null);

// 跨域全开，放行来源的同源策略
$origin = $_SERVER['HTTP_ORIGIN']; 
header("Access-Control-Allow-Headers:piaoju,credentials,content-type"); // 可提供票据
header("Access-Control-Allow-Origin:$origin");
header("Access-Control-Allow-Methods:*");
header("Access-Control-Allow-Credentials: true"); 
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { // 拦截OPTIONS请求直接通过
    header("HTTP/1.1 200 OK");
    exit;
}

//=== 数据库连接 ===================================================================
$mysql = new MMysql($PZ['db']);

//=== 路由获取 ===============================================================
//                                  网址如http://abc.com/api.php?y=controller/action
$luyou = isset($_GET['y']) ? explode('/', $_GET['y']) : [ 'index', 'index' ]; 
$cName = 'kongzhiqi\\' . ucfirst($luyou[0]); // 控制器名
$aName = isset($luyou[1]) ? strtolower($luyou[1]) . '' : 'index'; // 方法名

// === 授权 =======================================================================
// 非开放控制器要检查授权
if ( !in_array($luyou[0],$PZ['open_kongzhiqi'] )) {
    $gonggong = new kongzhiqi\Gonggong();
    $gonggong->jiancha(); // 调用公共类的“检查”方法，里面会检查权限并标记当前信息
}

// 加载目标程序 ===================================================================
$chengxu = new $cName();
// 执行前置方法
if(method_exists($chengxu,'__qianzhi')) { 
    $chengxu->__qianzhi();
}
// 执行目标方法
$chengxu->$aName();
// 执行后置方法
if(method_exists($chengxu,'__houzhi')) {
    $chengxu->__houzhi();
}


